package com.ruoyi.business.service;

import java.io.IOException;
import java.util.Date;
import java.util.List;
import com.ruoyi.business.domain.ImportData;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.business.vo.ExperimentTimeRangeVO;
import com.ruoyi.business.vo.ImportDataGroupVO;

import javax.servlet.http.HttpServletResponse;

/**
 * 导入数据Service接口
 * 
 * @author qiancheng
 * @date 2025-09-15
 */
public interface IImportDataService extends IService<ImportData>
{
    /**
     * 查询导入数据
     * 
     * @param id 导入数据主键
     * @return 导入数据
     */
    public ImportData selectImportDataById(Long id);

    /**
     * 查询导入数据列表
     * 
     * @param importData 导入数据
     * @return 导入数据集合
     */
    public List<ImportData> selectImportDataList(ImportData importData);

    /**
     * 新增导入数据
     * 
     * @param importData 导入数据
     * @return 结果
     */
    public int insertImportData(ImportData importData);

    /**
     * 修改导入数据
     * 
     * @param importData 导入数据
     * @return 结果
     */
    public int updateImportData(ImportData importData);

    /**
     * 批量删除导入数据
     * 
     * @param ids 需要删除的导入数据主键集合
     * @return 结果
     */
    public int deleteImportDataByIds(Long[] ids);

    /**
     * 删除导入数据信息
     * 
     * @param id 导入数据主键
     * @return 结果
     */
    public int deleteImportDataById(Long id);

    /**
     * 导入数据
     * @param importDataList
     * @param updateSupport
     * @return
     */
    String importImportData(List<ImportData> importDataList, boolean updateSupport);

    /**
     * 根据类型获取导入时间列表
     */
    List<String> getImportTimesByType(Integer type);

    /**
     * 根据导入时间获取实验时间范围
     * @param importTime 导入时间
     * @param type 数据类型
     * @return 实验时间范围 VO
     */
    List<ExperimentTimeRangeVO> getTimeRangeByImportTime(Date importTime, Integer type);


    /**
     * 根据type下载不同的Excel模板
     *
     * @param type 数据类型：1=液位，2=热学，3=热流，4=压力流量
     * @param response HttpServletResponse
     */
    void downloadTemplate(Integer type, HttpServletResponse response) throws IOException;

    /**
     * 查询导入数据并按 type 分组（新方法）
     *
     * @param typeList 可选，数据类型列表
     * @param field1 可选，字段1过滤
     * @param field2 可选，字段2过滤
     * @param importDay 可选，导入日期过滤
     * @param startTime 可选，开始时间过滤
     * @param endTime 可选，结束时间过滤
     * @return 按 type 分组的导入数据 VO 列表
     */
    List<ImportDataGroupVO> selectImportDataGroupedByTypes(String typeList,
                                                           String field1,
                                                           String field2,
                                                           Date importDay,
                                                           String startTime,
                                                           String endTime);

    /**
     * 富氧四级页面
     *
     * @param typeList 可选，数据类型列表
     * @param importDay 可选，导入日期过滤
     * @param startTime 可选，开始时间过滤
     * @param endTime 可选，结束时间过滤
     * @return 按 type 分组的导入数据 VO 列表
     */
    List<ImportDataGroupVO> queryCombustionProperties(String typeList,
                                                      Date importDay,
                                                      String startTime,
                                                      String endTime);

    /**
     * 立式四级页面
     *
     * @param typeList 可选，数据类型列表
     * @param importDay 可选，导入日期过滤
     * @param startTime 可选，开始时间过滤
     * @param endTime 可选，结束时间过滤
     * @return 按 type 分组的导入数据 VO 列表
     */
    List<ImportDataGroupVO> getVertFourthInfo(String typeList,
                                                      Date importDay,
                                                      String startTime,
                                                      String endTime);
}
